package com.atguigu.lease.common.minio;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ClassName: MinioProperties
 * Package: com.atguigu.lease.common.minio
 *
 * @Create 2025/10/30 15:24
 * @Author 阿瓒
 * @Version 1.0
 * Description: 专门存储minio的配置参数
 *
 * spring -> 核心容器 -> 我们将对象交给ioc容器管理(@Controller @Service @Component)
 * 同时可以给我们的对象进行属性注入(@Autowired @Value @ConfigurationProperties)
 *
 * 总结：
 *    1. springboot框架的优势是什么？
 *        简化整合 ： starter -> 导入场景启动器 -> 具备了某个方向的所有依赖 （自动配置类 【142】）
 *        简化开发 ： springboot会自动按需将核心组件加入到ioc容器（0配置） -> 自动配置原理 -> 启动类 -> @EnableAutoConfiguration -> @Import -> ImportSelector -> 142
 *        简化配置 : springboot统一将配置管理在application的文件中！！ 不需要我们加载可以直接读取
 *    2. springboot整合带有场景启动器
 *        2.1 导入对方场景启动器 （spring-boot-starter-xx | xx-spring-boot-starter ）
 *        2.2 需要修改application配置参数（mybatis -> username password url driver）
 *        2.3 直接使用核心组件即可 RedisTemplate
 *    3. springboot整合不带场景启动器
 *        3.1 导入对方的普通依赖 （依赖所需要的依赖）
 *        3.2 单独创建一个接收参数的Properties类 + 使用springboot批量读取注解 @ConfigurationProperties(prefix = "自己约定前缀");
 *        3.3 单独创建一个配置类 + @Bean方法将第三方组件加入到ioc容器 + 接收参数的配置类XxxProperties声明！ @EnableConfigurationProperties（XxxProperties.class） [懒汉]
 *        3.4 正常声明配置参数
 *        3.5 正常使用核心组件对象
 *
 *
 * 配置类怎么加入到容器
 *  1.@Conponent (MinioProperties)  [饿汉]
 *  2.@EnableConfigurationProperties(xxx.Properties.class) (使用我们的配置类!MinioConfiguration)  [懒汉]
 */
@Data
@ConfigurationProperties(prefix = "minio")  //批量属性注入 @Value的增强版
public class MinioProperties {

    private String username;
    private String password;
    private String endpoint;
    private String bucketName;

}
